﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;

namespace BKBIS
{
    /// <summary>
    /// Lớp này để dò tìm lỗi trên các vỉ thuốc
    /// </summary>
    internal class FindError
    {
        /// <summary>
        /// Hàm này đánh dấu các viên thuốc bị lỗi
        /// </summary>
        /// <param name="error"> tên lỗi mà chương trình đã nhận dạng được </param>
        /// <param name="i"> số thứ tự viên bị lỗi </param>
        /// <param name="ImageInput"> ảnh ban đầu dùng để đánh dấu lỗi </param>
        /// <param name="rect"> kích thước hình chữ nhật dùng để đánh dấu </param>
        /// <param name="data"> thông tin đã lưu khi training</param>
        /// <returns></returns>
        public Image<Hsv, Byte> DrawError(int error, int i, Image<Hsv, Byte> ImageInput, Rectangle rect,
            BlisterFeatures data, bool showerror)
        {
            MCvFont newfont = data.font;

            if (error == 0)     // nếu viên thuốc không lỗi
            {
                ImageInput.Draw(rect, new Hsv(58, 211, 246), 2);     // vẽ viền màu xanh lá cây
            }
            else                // nếu viên thuốc bị lỗi
            {
                ImageInput.Draw(rect, new Hsv(0, 255, 255), 2);     // vẽ viền màu đỏ
                if (showerror)
                {
                    ImageInput.Draw(error.ToString(), ref newfont,
                        new Point(rect.X + 10, rect.Y), new Hsv(0, 0, 0));
                }

                // MessageBox.Show(result);
            }
            return ImageInput;
        }

        /// <summary>
        /// Hàm này kiểm tra viên bị lỗi thuộc vỉ nào
        /// </summary>
        /// <param name="i"> số thứ tự viên bị lỗi</param>
        /// <param name="error">tên lỗi mà chương trình đã nhận dạng được</param>
        /// <param name="k"> số thứ tự của vỉ bị lỗi</param>
        /// <returns> tình trạng các viên thuốc trong ảnh </returns>
        public int[,] CheckBlister(int i, int error, int[,] mangcu, int blister)
        {

            int[,] vi = mangcu;
            if (blister == 60)
            {
                if (i <= 30)
                {
                    if (i%(6) == 1 || i%(6) == 2)
                    {

                        vi[1, error]++;

                        //   MessageBox.Show("vi so 1" + "bi loi " + error);

                    }
                    else if (i%(6) == 3 || i%(6) == 4)
                    {
                        vi[2, error]++;

                        //   MessageBox.Show("vi so 2" + "bi loi " + error);
                    }
                    else if (i%(6) == 5 || i%(6) == 0)
                    {
                        vi[3, error]++;

                        //   MessageBox.Show("vi so 3" + "bi loi " + error);
                    }
                }
                else
                {
                    if (i%(6) == 1 || i%(6) == 2)
                    {
                        vi[4, error]++;

                        //  MessageBox.Show("vi so 4" + "bi loi " + error);
                    }
                    else if (i%(6) == 3 || i%(6) == 4)
                    {
                        vi[5, error]++;

                        //  MessageBox.Show("vi so 5" + "bi loi " + error);
                    }
                    else if (i%(6) == 5 || i%(6) == 0)
                    {
                        vi[6, error]++;

                        //   MessageBox.Show("vi so 6" + "bi loi " + error);
                    }

                }
            }
            else if (blister == 40)
            {
                if (i <= 20)
                {
                    if (i%(4) == 1 || i%(4) == 2)
                    {

                        vi[1, error]++;

                        //   MessageBox.Show("vi so 1" + "bi loi " + error);

                    }
                    else if (i%(4) == 3 || i%(4) == 0)
                    {
                        vi[2, error]++;

                        //   MessageBox.Show("vi so 2" + "bi loi " + error);
                    }

                }
                else
                {
                    if (i%(4) == 1 || i%(4) == 2)
                    {
                        vi[3, error]++;

                        //  MessageBox.Show("vi so 4" + "bi loi " + error);
                    }
                    else if (i%(4) == 3 || i%(4) == 0)
                    {
                        vi[4, error]++;

                        //  MessageBox.Show("vi so 5" + "bi loi " + error);
                    }

                }
            }

            return vi;
        }

        /// <summary>
        /// hàm này để nhận biết lỗi của viên thuốc thuộc dạng nào
        /// </summary>
        /// <param name="i">số thứ tự viên bị lỗi</param>
        /// <param name="sh"> biến chứa thông tin về hình dạng viên thuốc </param>
        /// <param name="ar">biến chứa thông tin về diện tích viên thuốc</param>
        /// <param name="ra">biến chứa thông tin về kích thước viên thuốc</param>
        /// <param name="error"> kết quả lỗi viên thuốc dạng số</param>
        /// <param name="result">kết quả lỗi viên thuốc dạng chuỗi </param>
        public void CheckError(int i, bool sh, int ar, bool ra, out int error, out string result)
        {
            result = "";
            error = 0;
            if (ar == 0)
            {
                if (sh == false)
                {
                    error = 5;
                    result = "vien so " + i + " Khong co thuoc";
                }
                else
                {
                    error = 2;
                    result = "vien so " + i + " khac mau";
                }
            }
            else if (ar == 1)
            {
                if (sh)
                {
                    if (ra)
                    {
                        error = 1;
                         result = "vien so " + i + " bi vo";
                    }

                    else
                    {
                        error = 3;
                        result = "vien so " + i + " co kich thuoc nho hon";
                    }
                }
                else
                {
                    error = 4;
                    result = "vien so " + i + " Khong cung dang hinh ban dau";
                }
            }
            else        // error =2
            {
                error = 0;
            }

            //if (sh == false)
            //{
            //    if (ar == 0)
            //    {
            //        error = 5;
            //        result = "vien so " + i + " Khong co thuoc";
            //    }
            //    else
            //    {
            //        error = 4;
            //        result = "vien so " + i + " Khong cung dang hinh ban dau";
            //    }


            //}
            //else
            //{
            //    if (ar == 0)
            //    {
            //        error = 2;
            //        result = "vien so " + i + " khac mau";
            //    }
            //    else if (ar == 1)
            //    {
            //        if (ra == true)
            //        {
            //            error = 1;
            //            result = "vien so " + i + " bi vo";
            //        }
            //        else
            //        {
            //            error = 3;
            //            result = "vien so " + i + " co kich thuoc nho hon";
            //        }
            //    }
            //    else
            //    {
            //        error = 0;
            //    }
            //}
        }
    
}
}






//if (ra == false )
                //{
                //    error = 3;
                //    result = "vien so " + i + " co kich thuoc nho hon";
                //}
              
                
                //else 
                //{
                //    if (ar == 0)
                //    {
                //          error = 2;
                //   result = "vien so " + i + " khac mau";
                //    }
                //    else if (ar == 1)
                //    {
                //         error = 1;
                //        result = "vien so " + i + " bi vo";
                //    }
                //    else
                //    {
                //          error = 0;
                //    }
                    
                
                
                


                
   